home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.xml;
-
- import com.extensibility.util.Debug;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.Writer;
-
- public final class XMLWriter extends Writer {
- byte[] buffer;
- boolean firstWrite;
- int encoding;
- // $FF: renamed from: os java.io.OutputStream
- OutputStream field_0;
-
- public XMLWriter(OutputStream var1) {
- this(var1, 0);
- }
-
- public XMLWriter(OutputStream var1, int var2) {
- this.buffer = new byte[8082];
- this.firstWrite = true;
- this.field_0 = var1;
- this.setEncoding(var2);
- }
-
- private void setEncoding(int var1) {
- this.encoding = var1;
- }
-
- public void write(char[] var1, int var2, int var3) throws IOException {
- int var4 = 0;
- switch (this.encoding) {
- case 0:
- var4 = this.fillUTF8(var1, var2, var3);
- break;
- case 1:
- if (this.firstWrite) {
- this.field_0.write(new byte[]{-2, -1});
- this.firstWrite = false;
- }
-
- var4 = this.fillUTF1612(var1, var2, var3);
- break;
- case 2:
- if (this.firstWrite) {
- this.field_0.write(new byte[]{-1, -2});
- this.firstWrite = false;
- }
-
- var4 = this.fillUTF1621(var1, var2, var3);
- break;
- case 3:
- var4 = this.fillISO88591(var1, var2, var3);
- break;
- case 4:
- var4 = this.fillASCII(var1, var2, var3);
- break;
- default:
- Debug.assert(false, String.valueOf("unknown encoding: ").concat(String.valueOf(this.encoding)));
- }
-
- this.field_0.write(this.buffer, 0, var4);
- }
-
- public int fillUTF1621(char[] var1, int var2, int var3) throws IOException {
- if (var3 * 2 > this.buffer.length) {
- this.buffer = new byte[var3 * 2];
- }
-
- int var4 = 0;
-
- for(int var5 = var2 + var3; var2 < var5; ++var2) {
- this.buffer[var4++] = (byte)(var1[var2] & '\uffff');
- this.buffer[var4++] = (byte)((var1[var2] & -65536) >> 8);
- }
-
- return var4;
- }
-
- public int fillUTF1612(char[] var1, int var2, int var3) throws IOException {
- if (var3 * 2 > this.buffer.length) {
- this.buffer = new byte[var3 * 2];
- }
-
- int var4 = 0;
-
- for(int var5 = var2 + var3; var2 < var5; ++var2) {
- this.buffer[var4++] = (byte)((var1[var2] & -65536) >> 8);
- this.buffer[var4++] = (byte)(var1[var2] & '\uffff');
- }
-
- return var4;
- }
-
- public int fillASCII(char[] var1, int var2, int var3) throws IOException {
- if (var3 > this.buffer.length) {
- this.buffer = new byte[var3];
- }
-
- int var4 = 0;
-
- for(int var5 = var2 + var3; var2 < var5; ++var2) {
- this.buffer[var4++] = (byte)(var1[var2] & 127);
- }
-
- return var4;
- }
-
- public int fillISO88591(char[] var1, int var2, int var3) throws IOException {
- if (var3 > this.buffer.length) {
- this.buffer = new byte[var3];
- }
-
- int var4 = 0;
-
- for(int var5 = var2 + var3; var2 < var5; ++var2) {
- this.buffer[var4++] = (byte)(var1[var2] & 255);
- }
-
- return var4;
- }
-
- public int fillUTF8(char[] var1, int var2, int var3) throws IOException {
- if (var3 * 4 > this.buffer.length) {
- this.buffer = new byte[var3 * 4];
- }
-
- int var4 = 0;
-
- for(int var5 = var2 + var3; var2 < var5; ++var2) {
- char var6 = var1[var2];
- if (var6 >= 1 && var6 <= 127) {
- this.buffer[var4++] = (byte)var6;
- } else if (var6 > 2047) {
- this.buffer[var4++] = (byte)(224 | var6 >> 12 & 15);
- this.buffer[var4++] = (byte)(128 | var6 >> 6 & 63);
- this.buffer[var4++] = (byte)(128 | var6 >> 0 & 63);
- } else {
- this.buffer[var4++] = (byte)(192 | var6 >> 6 & 31);
- this.buffer[var4++] = (byte)(128 | var6 >> 0 & 63);
- }
- }
-
- return var4;
- }
-
- public void flush() throws IOException {
- if (this.field_0 == null) {
- throw new IOException();
- } else {
- this.field_0.flush();
- }
- }
-
- public void close() throws IOException {
- if (this.field_0 == null) {
- throw new IOException();
- } else {
- this.field_0.close();
- this.field_0 = null;
- }
- }
- }
-